package br.eng.eliseu.gwt.gestaoWeb.client.ui.site.cadastro;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import br.eng.eliseu.gwt.gestaoWeb.client.ui.component.messageBox.MessageBoxPanel;
import br.eng.eliseu.gwt.gestaoWeb.client.ui.component.textBox.MaskedTextBox;
import br.eng.eliseu.gwt.gestaoWeb.client.ui.core.EnderecoView;
import br.eng.eliseu.gwt.gestaoWeb.client.util.DateUtilClient;
import br.eng.eliseu.gwt.gestaoWeb.model.enums.SistemasEnum;
import br.eng.eliseu.gwt.gestaoWeb.model.pessoa.TipoPessoaEnum;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.text.shared.Renderer;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.ValueListBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.datepicker.client.DateBox;

public class PrimeiroCadastroView extends Composite implements PrimeiroCadastroPresenter.Display {

	private static CadastroViewUiBinder uiBinder = GWT.create(CadastroViewUiBinder.class);
	interface CadastroViewUiBinder extends UiBinder<Widget, PrimeiroCadastroView> {	}
	
	/* Mensagens
	 */
	@UiField MessageBoxPanel msgPanel;
	
	/* Pass1
	 */
	@UiField AbsolutePanel passo1Panel;
	@UiField TextBox empresaTBox;
	@UiField Label docTipoPessoaLabel;
	@UiField (provided = true) ValueListBox<TipoPessoaEnum> tipoDocLBox;
	@UiField MaskedTextBox docEmpresaTBox;
	@UiField TextBox nomeTBox;
	@UiField MaskedTextBox cpfTBox;
	@UiField DateBox nascimentoDBox;
	@UiField TextBox emailTBox;
	@UiField TextBox usuarioTBox;
	@UiField PasswordTextBox senhaTBox;
	@UiField CheckBox concordaContratoCBox;
	@UiField Button proximoPassoButtona;
	
	/* Pass2
	 */
	@UiField VerticalPanel passo2Panel;
	@UiField EnderecoView enderecoView;
	@UiField Button terminaButton;
	@UiField Button voltarButton;
	
	
//	private EnderecoView enderecoView;
	private Integer passo;
	private PrimeiroCadastroViewVO primeiroCadastroVO;
	
	public PrimeiroCadastroView() {
		// --- Controi ValueListBox <TipoEnderecoEnum>
		tipoDocLBox = new ValueListBox<TipoPessoaEnum>(new Renderer<TipoPessoaEnum>() {
			public String render(TipoPessoaEnum value) {
				String s = "";
				if (value != null) {
					s = value.getNome();
				}
				return s;
			}

			public void render(TipoPessoaEnum value, Appendable appendable) throws IOException {
				String s = render(value);
				appendable.append(s);
			}
		});

		initWidget(uiBinder.createAndBindUi(this));
		
		passo = 1;
		showPasso(passo);
		
		populaTipoDocLBox();
		tipoDocLBox.setValue(TipoPessoaEnum.JURIDICA);
		docEmpresaTBox.setMask("99.999.999/9999-99");
		docTipoPessoaLabel.setText("CNPJ");
		
		cpfTBox.setMask("999.999.999-99");
		nascimentoDBox.setFormat( DateUtilClient.getDateFormat() );
		
		bind();

		docEmpresaTBox.setValue("09.648.511/0001-99");
		cpfTBox.setValue("753.550.946-00");
		emailTBox.setValue("eliseu@eliseu.eng.br");
		
	}

	public void bind() {
		// --- Evendo de mudanca de estado do comboDocumento Empresa
		tipoDocLBox.addValueChangeHandler(new ValueChangeHandler<TipoPessoaEnum>(){
			public void onValueChange(ValueChangeEvent<TipoPessoaEnum> event) {
				docEmpresaTBox.setValue("");
				if (event.getValue().equals(TipoPessoaEnum.JURIDICA)){
					docEmpresaTBox.setMask("99.999.999/9999-99");
					docTipoPessoaLabel.setText("CNPJ");
				} else {
					docEmpresaTBox.setMask("999.999.999-99");
					docTipoPessoaLabel.setText("CPF");

				}
				
			}
	    });
	}

	public void populaTipoDocLBox() {
		List<TipoPessoaEnum> list = new ArrayList<TipoPessoaEnum>(Arrays.asList(TipoPessoaEnum.values()));
		tipoDocLBox.setAcceptableValues(list);
	}

	public Boolean checaCampoEmBrancoPasso1(){
		boolean temErro = false;
		if (empresaTBox==null || "".equals(empresaTBox.getValue())){
			getMsgPanel().addMsg("Informe o Nome da Empresa");
			temErro = true;
		}
		if (docEmpresaTBox==null || "".equals(docEmpresaTBox.getValue())){
			getMsgPanel().addMsg("Informe o Documento da Empresa");
			temErro = true;
//		} else {
//			if ( !ValidacaoUtil.isDocumento(docEmpresaTBox.getValue())){
//				getMsgPanel().addMsg("Informe um "+docTipoPessoaLabel.getText()+" valido");
//				temErro = true;
//			}
		}
		
		if (nomeTBox==null || "".equals(nomeTBox.getValue())){
			getMsgPanel().addMsg("Informe o Nome completo do Usuário que sera o administrador da Empresa no sistema");
			temErro = true;
		}
		
		if (nascimentoDBox==null || "".equals(nascimentoDBox.getValue())){
			getMsgPanel().addMsg("Informe a Data de Nascimento");
			temErro = true;
		}
		
		if (cpfTBox==null || "".equals(cpfTBox.getValue())){
			getMsgPanel().addMsg("Informe o CPF do Usuário");
			temErro = true;
//		} else {
//			if ( !ValidacaoUtil.isValidCPF(cpfTBox.getValue())){
//				getMsgPanel().addMsg("Informe um CPF valido");
//				temErro = true;
//			}
		}
		
		if (emailTBox==null || "".equals(emailTBox.getValue())){
			getMsgPanel().addMsg("Informe o e-Mail");
			temErro = true;
//		} else {
//			if( !ValidacaoUtil.isValidEmail(emailTBox.getValue())){
//				getMsgPanel().addMsg("Informe um e-Mail correto");
//				temErro = true;
//			}
		}
		
		if (usuarioTBox==null || "".equals(usuarioTBox.getValue())){
			getMsgPanel().addMsg("Informe um Usuário");
			temErro = true;
		}
		
		if (senhaTBox==null || "".equals(senhaTBox.getValue())){
			getMsgPanel().addMsg("Informe a Senha do Usuário");
			temErro = true;
		}
		if (concordaContratoCBox==null || !concordaContratoCBox.getValue()){
			getMsgPanel().addMsg("Marque que você concorda com os termos de uso do sistema.");
			temErro = true;
		}
		
		return !temErro;
	}
	
	public Boolean checaCampoEmBrancoPasso2(){
		boolean temErro = false;
		if ("".equals(enderecoView.getCep())){
			getMsgPanel().addMsg("Informe o CEP da Empresa");
			temErro = true;
		}
		if ("".equals(enderecoView.getPaisItem())){
			getMsgPanel().addMsg("Informe o Pais onde esta localizada a Empresa");
			temErro = true;
		} else if ("BRASIL".equals(enderecoView.getPaisItem())){
			if ("".equals(enderecoView.getEstadoItem())){
				getMsgPanel().addMsg("Informe o Estado onde esta localizada a Empresa");
				temErro = true;
			}
			if ("".equals(enderecoView.getCidadeItem())){
				getMsgPanel().addMsg("Informe a Cidade onde esta localizada a Empresa");
				temErro = true;
			}
		}
		if ("".equals(enderecoView.getTipoLogradouro())){
			getMsgPanel().addMsg("Informe o Tipo de Logradouro");
			temErro = true;
		}
		if ("".equals(enderecoView.getLogradouro())){
			getMsgPanel().addMsg("Informe o Logradouro da Empresa");
			temErro = true;
		}
		if ("".equals(enderecoView.getBairro())){
			getMsgPanel().addMsg("Informe o Bairro da Empresa");
			temErro = true;
		}
		
//		carregaVO();
		return !temErro;
	}
	
	public void carregaVO(){
		primeiroCadastroVO = new PrimeiroCadastroViewVO();
		
		primeiroCadastroVO.setEmpresa(empresaTBox.getValue());
		primeiroCadastroVO.setTipoPessoa(tipoDocLBox.getValue());
		primeiroCadastroVO.setDocEmpresa(docEmpresaTBox.getValue());
		primeiroCadastroVO.setNomeCompleto(nomeTBox.getValue());
		primeiroCadastroVO.setDocUsuario(cpfTBox.getValue());
		primeiroCadastroVO.setNascimento(nascimentoDBox.getValue());
		primeiroCadastroVO.setEmail(emailTBox.getValue());
		primeiroCadastroVO.setUsuario(usuarioTBox.getValue());
		primeiroCadastroVO.setSenha(senhaTBox.getValue());
		
		
		primeiroCadastroVO.setCep(enderecoView.getCep());
		primeiroCadastroVO.setPais(enderecoView.getPaisItem());
		primeiroCadastroVO.setEstado(enderecoView.getEstadoItem());
		primeiroCadastroVO.setCidade(enderecoView.getCidadeItem());
		primeiroCadastroVO.setTipoLogradouro(enderecoView.getTipoLogradouroItem());
		primeiroCadastroVO.setLogradouro(enderecoView.getLogradouro());
		primeiroCadastroVO.setNumero(enderecoView.getNumero());
		primeiroCadastroVO.setComplemento(enderecoView.getComplemento());
		primeiroCadastroVO.setBairro(enderecoView.getBairro());
		
		// Este parametro por enquanto vai ficar fixo
		 
		primeiroCadastroVO.setSistema(SistemasEnum.FINANCEIRO);
		
	}
	
	public void showPasso( Integer passo ){
		if (passo!=null){
			msgPanel.setVisible(false);
			if (passo.equals(1)){
				passo1Panel.setVisible(true);
				passo2Panel.setVisible(false);
			} else if (passo.equals(2)){
				passo1Panel.setVisible(false);
				passo2Panel.setVisible(true);
			}
			
		}
	}
	
	public Widget asWidget() {
		return this;
	}
	public void showMessage(String message) {
	}
	public void showError(String message) {
	}
	public void showWaitMessage(boolean b) {
	}
	

	public HasClickHandlers getProximoPassoButton() {
		return proximoPassoButtona;
	}
	public HasClickHandlers getVoltarButton() {
		return voltarButton;
	}
	public HasClickHandlers getTerminaButton() {
		return terminaButton;
	}
	public MessageBoxPanel getMsgPanel() {
		return msgPanel;
	}
	public PrimeiroCadastroViewVO getPrimeiroCadastroVO() {
		return primeiroCadastroVO;
	}
	public void setPrimeiroCadastroVO(PrimeiroCadastroViewVO vo) {
		this.primeiroCadastroVO = vo;
	}


}
